Performance Profile Tools——perf and gprof

  1. 1、参考
  2. 2、perf tool
  3. 3、gprof tool
    1. 3.1、gprof简介
    2. 3.2、gprof具有以下优缺点
    3. 3.3、gprof分析方法:
    4. 3.4、实例分析
  4. THE END!

1、参考

https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/
https://www.cnblogs.com/arnoldlu/p/6241297.html
https://sourceware.org/binutils/docs/gprof/
https://baike.baidu.com/item/gprof/8995496

https://blog.csdn.net/viphong/article/details/70176604
https://www.cnblogs.com/andashu/p/6378000.html
https://blog.csdn.net/zsl_oo7/article/details/71310444?utm_source=itdadao&utm_medium=referral

2、perf tool

perf :Linux下系统性能调优工具.
系统级的性能优化,包括性能剖析和代码优化,性能剖析的关键在于找到程序耗时和瓶颈所在,这时就可以利用perf这把瑞士军刀了。
perf的功能是很强大的,
具体使用方法可以参考:https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/

3、gprof tool

3.1、gprof简介

gprof: GNU提供的性能调试工具。可以打印出程序运行中各个函数消耗的时间。对于分析程序性能瓶颈很好帮助。
gprof是GNU profile工具,可以运行于linux、AIX、Sun等操作系统进行C、C++、Pascal、Fortran程序的性能分析,用于程序的性能优化以及程序瓶颈问题的查找和解决。通过分析应用程序运行时产生的“flat profile”,可以得到每个函数的调用次数,每个函数消耗的处理器时间,也可以得到函数的“调用关系图”,包括函数调用的层次关系,每个函数调用花费了多少时间。

3.2、gprof具有以下优缺点

1) 优点:

  • GNU工具,人手一个;
  • 混合方法采集信息。

2) 缺点:

  • 需要编译选项支持:
    • 使用gcc/cc编译和链接时需要加入-pg选项
    • 使用ld链接时需要用/lib/gcrt0.o代替crt0.o作为第一个input文件
    • 如果要调试libc库需要使用-lc_p代替-lc参数
  • 调试多线程程序只能统计主线程的信息(所以不能用于kingbase)。

3.3、gprof分析方法:

1、编译、链接时均加上-pg,生成demo;
2、执行生成gmon.out文件;
3、gprof分析前一步生成的gmon.out文件,查看生成 txt文件中各个函数所占比例;

 $gprof  ./demo  gmon.out  > profile.txt

注: gprof只能在linxu64位下对可执行文件进行分析。

3.4、实例分析

为了进一步说明gprof的使用方法,
(1)对mpeg4开源编解码库xvid解码器中的各函数进行性能分析:
测试程序:解码器程序xvid_decraw
xvid的编译可以参见:https://blog.csdn.net/SoaringLee_fighting/article/details/68942330
在编译生成解码器xvid_decraw时需要修改对应makefile,在编译和链接时都加上-pg参数。

make
./xvid_decraw -i input.m4v
gprof  ./xvid_decraw gmon.out >profile.txt

生成分析结果profile.txt:
生成分析结果

性能分析结论:
从分析结果可知,transfer8x8_copy_c函数占比42%,decode_pframe函数占比28%,get_inter_block_h263函数占比114%,get_pmv2函数占比14%,这几个函数的占比较大,通过优化这几个函数可以显著提升性能。由此看出插值,反dct等模块的复杂度是很高的。

(2)对H264标准开源编码器x264中的各个函数进行性能分析:
测试程序: x264
x264的编译可以参考:https://blog.csdn.net/SoaringLee_fighting/article/details/78882801

./configure
对configure之后生成的config.mak中的CFLAGS和LDFLAGS增加-pg选项,另外需要去掉-fomit-frame-pointer选项
make
./x264 -o out.264 input.yuv
gprof  ./x264 gmon.out >profile.txt

生成分析结果profile.txt:
生成分析结果profile

性能分析结论:
主要耗时的函数有:

get_ref
x264_pixel_satd_8x4
x264_pixel_satd_x4_16x16
x264_pixel_satd_x4_8x8
mc_chroma

说明对于编码器,运动估计的复杂度是很高的。

gprof 产生的信息解释:

| time | Cumulatve seconds| Self Seconds|Calls|Self TS/call|Total TS/call|name|
|—|—|—|—|—|—|—|—|
|该函数消耗时间占程序总时间百分比|程序的累积执行时间|该函数本身执行时间|函数被调用次数|函数平均执行次数|函数平均执行时间|函数名


THE END!


本博文只能阅读,谢绝转载,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2963033731@qq.com

文章标题:Performance Profile Tools——perf and gprof

字数:981

本文作者:Soaring Lee

发布时间:2018-09-04, 10:45:47

最后更新:2021-06-14, 12:13:44

原始链接:https://soaringleefighting.github.io/2018/09/04/【Tools系列】Performance Profile Tools——perf and gprof/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏

相册